
// 应用配置
var config = {

  	project    : "官网",
    prefix     : "gw",
  	version    : "0.0.1",
	base       : "http://shop.donguayx.com/",

    base_img   : "http://img.donguayx.com/",
};

export default {

  	ajax (request={},callback){

        if(!request) request = {};
        if(!callback) callback = new Function;

  	    // 发起请求 
        //if ( request.loading ) this.loading(true);

        // 本地路径则启用本机协议，测试用
        let base = window.location.protocol === "file:" ? "http://127.0.0.1:8360/" : config.base
        
        // 清除无效对象属性        
        if(typeof request.params == "object")
            for(let i in request.params)
                if(request.params[i]===null || request.params[i]==="" || request.params[i]===undefined)
                    delete request.params[i]

        this.$http({
            method      : request.type=='post'?'POST':'GET',  // 请求类型，仅能使用POST或GET，默认GET
            emulateHTTP : request.type=='post'?true:false,
            url         : base + request.url,          // 请求地址
            params      : request.type=='post'?{}:request.params,                     // 请求参数
            body        : request.type=='post'?request.params:{},
            headers     : request.headers,
        })
        .then(function(ret,next){
            //this.loading(false);
            // 收到 401 未授权登陆
            if(ret.body.error==401){
                this.$store.commit('BASE_UPDATE',{
                    key : 'login',
                    val : true
                })
                this.$router.replace({name:'login'})
            }
            // 微信可能会把 JSON 转换成字符串，这里需要转换回来
            if(typeof ret.data ==='string')
                try{
                    ret.data = JSON.parse(ret.data);
                }catch(err){

                }
            if(ret.data.error==0){
              // 请求成功 合法请求
                callback(ret.data,null,next);
            }else{
              // 请求成功 非法请求
                callback(null,ret.data,next);
            }            
        },function(ret,next){
            //this.loading(false);
              // 请求失败
            // console.log('ajax:',ret,next);
            callback(null,{
                //err_num : ret.status,
                error  : 404,
                msg     : config.debug ? "服务器接口请求失败" : "网络错误",
            },next);
        });
  	},
    

  // 消息窗口
    // toast ( msg, time, location ){
    //     // 向消息窗口发送事件
    //     //this.subWin.toast.$emit('toast',msg,time,location);
    // },
  // 消息窗口
    // loading ( show, type, msg ){
    //     // 向消息窗口发送事件
    //     this.$store.commit('BASE_UPDATE',{
    //             key : 'loading',
    //             val : show
    //     })
    // },

    _cache (key,val,time){
        if(key){
            if(val==undefined&&time==undefined){
                return this.getCache(key)
            }else if(val==null||time==0){
                return this.cleanCache(key)
            }else{
                return this.setCache(key,val,time)
            }
        }
    },
  // 获取缓存
    getCache (key){
        if(window.localStorage){
            var cache = window.localStorage[key];
            var cachetime = parseInt(window.localStorage.getItem(config.prefix+'_cache_life_'+key));
            var timestamp = new Date().getTime();
            // 检查缓存时间
            if(cachetime == 0 || cachetime > timestamp){
                // 有效缓存
                try{
                    return JSON.parse(window.localStorage[key]);  
                }catch(err){
                    return window.localStorage[key];  
                }
            }else{
                // 过期缓存
                this.cleanCache(key);
                return undefined;
            }
        }else{
            return null
        }
    },
  // 存储缓存
    setCache (key,val,time){
        if(window.localStorage){
            // 缓存时间
            var timestamp = time>0 && this.isInt(time) ? time * 1000 + new Date().getTime() : 0;
            window.localStorage.setItem(config.prefix+'_cache_life_'+key, timestamp);
            // 返回缓存结果
            return window.localStorage[key] = JSON.stringify(val);
        }else{
            return null
        }
    },
  // 清除缓存
    cleanCache (key){
        if(window.localStorage){
            window.localStorage.removeItem(key);
            window.localStorage.removeItem(config.prefix+'_cache_life_'+key);
            return undefined;
        }
    },
  // 清除全部缓存
    cleanAllCache (key){
        if(window.localStorage){
            window.localStorage.clean();
            return undefined;
        }
    },

  // 打印数组
    showobj (obj){
        alert(JSON.stringify(obj));
    },
  // 原始数据
    origin(obj){
        return JSON.parse(JSON.stringify(obj));
    },
  // 是否是整数
    isInt (obj){
        return (obj | 0) === obj;
    },

  // 获取配置文件
	getConfig (key){
		// 传入字段返回该字段，否则返回全部
		return key && typeof key === "string" ? config[key] : config;
	},
  // 保存配置文件
	setConfig (key,val){

		if(key && typeof key === "string"){
			if(!key) key = null;
			config[key] = val;
		}
	},
    // 时间戳
    timestamp() {
        return Date.parse(new Date()) / 1000;
    },

    // 浮点计算 - 加法
    mathAdd(arg1,arg2){
        var r1,r2,m;  
        try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}  
        try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}  
        m=Math.pow(10,Math.max(r1,r2));  
        return (arg1*m+arg2*m)/m; 
    },
    // 浮点计算 - 减法
    mathSub(arg1,arg2){
        var r1,r2,m,n;  
        try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}  
        try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}  
        m=Math.pow(10,Math.max(r1,r2));  
        //动态控制精度长度
        n=(r1>=r2)?r1:r2;  
        return ((arg1*m-arg2*m)/m).toFixed(n);  
    },

    // 浮点计算 - 乘法
    mathMul(arg1,arg2){   
        var m=0,s1=arg1.toString(),s2=arg2.toString()
        try{m+=s1.split(".")[1].length}catch(e){}   
        try{m+=s2.split(".")[1].length}catch(e){}   
        return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
    }   
}